/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.ares.service.sapimpl;

import com.ares.service.bean.BeanCentroCosto;
import com.ares.service.bean.BeanDivisionPersonal;
import com.ares.service.bean.BeanEvaluado;
import com.ares.service.bean.BeanEvaluador;
import com.ares.service.bean.BeanPeriodoReporte;
import com.ares.service.bean.BeanReporte;
import com.ares.service.bean.BeanReporteCalificaciones;
import com.ares.service.bean.BeanSociedad;
import com.ares.service.bean.BeanSubDivisionPersonal;
import com.ares.service.bean.BeanTipoPuesto;
import com.ares.service.bean.BeanUnidadOrganizativa;
import com.ares.service.dao.Administrador_I;
import com.ares.service.sap.ConexionSAP;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author electro
 */
public class SapAdministrador implements Administrador_I{
    public List<BeanReporte> getReporteCalificacion(BeanReporteCalificaciones beanReporteCalificaciones) throws Exception {
        List<BeanReporte> lstReportes = new ArrayList<BeanReporte>();
        ConexionSAP conSAP = ConexionSAP.getConexionSAP();
        try{
            conSAP.RegistrarRFC("ZHR_RFC_REPORTECALIFICACION_ED");
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getIdSociedad(), "SOCIE");
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getUnidadOrganizacional(), "UNIORGA");
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getDivisionPersonal(), "DIVPER");
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getSubDivisionPersonal(), "SUBDIVPER");
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getCentroCosto(), "CENCOSTO");
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getPeriodo(), "PERIODOE");
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getEvaluador(), "EVALUADOR");
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getEvaluado(), "EVALUADO");
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getIdTipoPuesto(), "TIPPUESTO");
            //System.out.println("el tipoPuesto es es: " + beanReporteCalificaciones.getIdTipoPuesto());
            
            conSAP.EjecutarRFC();
            beanReporteCalificaciones.setResultado(conSAP.rFC.getExportParameterList().getField("RESULTADO").getString());
            System.out.println("el resultado es: " + beanReporteCalificaciones.getResultado());

            if(beanReporteCalificaciones.getResultado().equals("X")){ //Si es igual a X, entonces hay data
                com.sap.mw.jco.JCO.Table calificaciones = null;
                calificaciones = conSAP.rFC.getTableParameterList().getTable("T_RESULTADO");
                for (int i = 0; i < calificaciones.getNumRows(); i++) {
                    calificaciones.setRow(i);
                    BeanReporte r = new BeanReporte();
                    r.setPeriodoEvaluado(calificaciones.getString("PERIODO"));
                    r.setNroPersonal(calificaciones.getString("NOPERSONAL"));
                    r.setEvaluadoResultado(calificaciones.getString("EVALUADO").toUpperCase());
                    r.setPosicionEvaluado(calificaciones.getString("PDESCRIPEVO").toUpperCase());
                    r.setGradoSalarial(calificaciones.getString("GRADOSAL"));
                    r.setEvaluadorResultado(calificaciones.getString("EVALUADOR").toUpperCase());
                    r.setPosicionEvaluador(calificaciones.getString("PDESCRIPEVR").toUpperCase());
                    r.setArea(calificaciones.getString("DESCRIPAREAEVO").toUpperCase());
                    r.setCalificacionObjetivos(calificaciones.getString("CALIFOBJ"));
                    	System.out.println(calificaciones.getString("CALIFOBJ"));
                    r.setCalificacionCompetencias(calificaciones.getString("CALIFCOMP"));
                    r.setEvaluacionIntegral(calificaciones.getString("EVALINTE"));
                    	System.out.println("EvalIntegral "  + calificaciones.getString("EVALINTE"));
                    r.setDescripcionIntegral(calificaciones.getString("DESCRIPINT").toUpperCase());
                    r.setNumeroOrden(i+1);
                    lstReportes.add(r);
                }
            }
            else{
                System.out.println("no hay data en sap");
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            conSAP.DesconectarSAP();
        }
        return lstReportes;
    }

    public List<BeanReporte> getReporteStatus(BeanReporteCalificaciones beanReporteCalificaciones) throws Exception {
        List<BeanReporte> lstReportes = new ArrayList<BeanReporte>();
        ConexionSAP conSAP = ConexionSAP.getConexionSAP();
        try{
            conSAP.RegistrarRFC("ZHR_RFC_REPORTEESTATUS_ED");
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getIdSociedad(), "SOCIE");
            System.out.println("la sociedad es: " + beanReporteCalificaciones.getIdSociedad());
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getUnidadOrganizacional(), "UNIORGA");
            System.out.println("la unidad es: " + beanReporteCalificaciones.getUnidadOrganizacional());
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getDivisionPersonal(), "DIVPER");
            System.out.println("la div es: " + beanReporteCalificaciones.getDivisionPersonal());
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getSubDivisionPersonal(), "SUBDIVPER");
            System.out.println("la sub div es: " + beanReporteCalificaciones.getSubDivisionPersonal());
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getCentroCosto(), "CENCOSTO");
            System.out.println("el ceco es: " + beanReporteCalificaciones.getCentroCosto());
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getPeriodo(), "PERIODOE");
            System.out.println("el periodo es: " + beanReporteCalificaciones.getPeriodo());
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getEvaluador(), "EVALUADOR");
            System.out.println("el evaluador es es: " + beanReporteCalificaciones.getEvaluador());
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getEvaluado(), "EVALUADO");
            System.out.println("el evaluado es es: " + beanReporteCalificaciones.getEvaluado());
            conSAP.IngresarDatosInput(beanReporteCalificaciones.getIdTipoPuesto(), "TIPPUESTO");
            System.out.println("el tipoPuesto es es: " + beanReporteCalificaciones.getIdTipoPuesto());
            conSAP.EjecutarRFC();

            //Respuesta del RFC
            beanReporteCalificaciones.setResultado(conSAP.rFC.getExportParameterList().getField("RESULTADO").getString());

            if(beanReporteCalificaciones.getResultado().equals("X")){ //Si es igual a X, entonces hay data
                com.sap.mw.jco.JCO.Table calificaciones = null;
                calificaciones = conSAP.rFC.getTableParameterList().getTable("T_RESULTADO");
                for (int i = 0; i < calificaciones.getNumRows(); i++) {
                    calificaciones.setRow(i);
                    BeanReporte r = new BeanReporte();
                    r.setPeriodoEvaluado(calificaciones.getString("PERIODO"));
                    r.setNroPersonal(calificaciones.getString("NOPERSONAL"));
                    r.setEvaluadoResultado(calificaciones.getString("EVALUADO").toUpperCase());
                    r.setPosicionEvaluado(calificaciones.getString("PDESCRIPEVO").toUpperCase());
                    r.setGradoSalarial(calificaciones.getString("GRADOSAL"));
                    r.setEvaluadorResultado(calificaciones.getString("EVALUADOR").toUpperCase());
                    r.setPosicionEvaluador(calificaciones.getString("PDESCRIPEVR").toUpperCase());
                    r.setArea(calificaciones.getString("DESCRIPAREAEVO").toUpperCase());
                    r.setEtapaObjetivos(calificaciones.getString("ETAPAEO").toUpperCase());                    
                    r.setStatusObjetivos(calificaciones.getString("ESTADOEO").toUpperCase());                    
                    r.setStatusCompetencias(calificaciones.getString("ESTADOEC").toUpperCase());                    
                    r.setStatusIntegral(calificaciones.getString("ESTADOEI").toUpperCase());                    
                    r.setStatusPlanAccion(calificaciones.getString("ESTADOPA").toUpperCase());                    
                    r.setNumeroOrden(i+1);
                    lstReportes.add(r);
                }
            }
            else{
                System.out.println("no hay data en sap");
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            conSAP.DesconectarSAP();
        }
        return lstReportes;
    }

    public List<BeanSociedad> getSociedades() throws Exception {
        String resultado ="";
        List<BeanSociedad> lstSociedades = new ArrayList<BeanSociedad>();
        ConexionSAP conSAP = ConexionSAP.getConexionSAP();
        try{
            conSAP.RegistrarRFC("ZMM_RFCFN_LEER_SOCIEDADES_ED");
            conSAP.EjecutarRFC();
            
            resultado = conSAP.rFC.getExportParameterList().getField("RESULTADO").getString();

            if(resultado.equals("X")){
                com.sap.mw.jco.JCO.Table sociedades = null;
                sociedades = conSAP.rFC.getTableParameterList().getTable("T_RESULTADO");
                for (int i = 0; i < sociedades.getNumRows(); i++) {
                    sociedades.setRow(i);
                    BeanSociedad b = new BeanSociedad();
                    b.setIdSociedad(sociedades.getString("CODIGO"));
                    b.setDescripcion(sociedades.getString("DESCRIP").toUpperCase());
                    lstSociedades.add(b);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            conSAP.DesconectarSAP();
        }
        return lstSociedades;
    }

    public List<BeanUnidadOrganizativa> getUnidadOrganizativa() throws Exception {
        String resultado = "";
        List<BeanUnidadOrganizativa> lstUnidadOrganizativa = new ArrayList<BeanUnidadOrganizativa>();
        ConexionSAP conSAP = ConexionSAP.getConexionSAP();
        try{
            conSAP.RegistrarRFC("ZMM_RFCFN_LEER_UNIDADORG_ED");
            conSAP.EjecutarRFC();

            resultado = conSAP.rFC.getExportParameterList().getField("RESULTADO").getString();

            if(resultado.equals("X")){
                com.sap.mw.jco.JCO.Table unidadesOrganizativas = null;
                unidadesOrganizativas = conSAP.rFC.getTableParameterList().getTable("T_RESULTADO");
                for (int i = 0; i < unidadesOrganizativas.getNumRows(); i++) {
                    unidadesOrganizativas.setRow(i);
                    BeanUnidadOrganizativa u = new BeanUnidadOrganizativa();
                    u.setIdUnidadOrganizativa(unidadesOrganizativas.getString("CODIGO"));
                    u.setDescripcion(unidadesOrganizativas.getString("DESCRIP").toUpperCase());
                    lstUnidadOrganizativa.add(u);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            conSAP.DesconectarSAP();
        }
        return lstUnidadOrganizativa;
    }

    public List<BeanDivisionPersonal> getDivisionPersonal(String idSociedad) throws Exception {
        List<BeanDivisionPersonal> lstDivisionPersonal = new ArrayList<BeanDivisionPersonal>();
        String resultado = "";
        ConexionSAP conSAP = ConexionSAP.getConexionSAP();
        try{
            conSAP.RegistrarRFC("ZMM_RFCFN_LEER_DIVISION_ED");
            conSAP.IngresarDatosInput(idSociedad, "CODSOC");
            conSAP.EjecutarRFC();

            resultado = conSAP.rFC.getExportParameterList().getField("RESULTADO").getString();

            if(resultado.equals("X")){
                com.sap.mw.jco.JCO.Table divisionPersonal = null;
                divisionPersonal = conSAP.rFC.getTableParameterList().getTable("T_RESULTADO");
                for (int i = 0; i < divisionPersonal.getNumRows(); i++) {
                    divisionPersonal.setRow(i);
                    BeanDivisionPersonal d = new BeanDivisionPersonal();
                    d.setIdDivisionPersonal(divisionPersonal.getString("CODIGO"));
                    d.setDescripcion(divisionPersonal.getString("DESCRIP").toUpperCase());
                    lstDivisionPersonal.add(d);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            conSAP.DesconectarSAP();
        }
        return lstDivisionPersonal;
    }

    public List<BeanSubDivisionPersonal> getSubDivisionPersonal(String idDivisionPersonal) throws Exception {
        List<BeanSubDivisionPersonal> lstSubDivisionPersonal = new ArrayList<BeanSubDivisionPersonal>();
        String resultado = "";
        ConexionSAP conSAP = ConexionSAP.getConexionSAP();
        try{
            conSAP.RegistrarRFC("ZMM_RFCFN_LEER_SUBDIVISION_ED");
            conSAP.IngresarDatosInput(idDivisionPersonal, "CODDIV");
            conSAP.EjecutarRFC();

            resultado = conSAP.rFC.getExportParameterList().getField("RESULTADO").getString();

            if(resultado.equals("X")){
                com.sap.mw.jco.JCO.Table subDivisionPersonal = null;
                subDivisionPersonal = conSAP.rFC.getTableParameterList().getTable("T_RESULTADO");
                for (int i = 0; i < subDivisionPersonal.getNumRows(); i++) {
                    subDivisionPersonal.setRow(i);
                    BeanSubDivisionPersonal s = new BeanSubDivisionPersonal();
                    s.setIdSubDivisionPersonal(subDivisionPersonal.getString("CODIGO"));
                    s.setDescripcion(subDivisionPersonal.getString("DESCRIP").toUpperCase());
                    lstSubDivisionPersonal.add(s);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            conSAP.DesconectarSAP();
        }
        return lstSubDivisionPersonal;
    }

    public List<BeanCentroCosto> getCentroCostos() throws Exception{
        String resultado = "";
        List<BeanCentroCosto> lstCentroCostos = new ArrayList<BeanCentroCosto>();
        ConexionSAP conSAP = ConexionSAP.getConexionSAP();
        try{
            conSAP.RegistrarRFC("ZMM_RFCFN_LEER_CECOS_ED");
            conSAP.EjecutarRFC();
            resultado = conSAP.rFC.getExportParameterList().getField("RESULTADO").getString();

            if(resultado.equals("X")){                
                com.sap.mw.jco.JCO.Table centroCostos = null;
                centroCostos = conSAP.rFC.getTableParameterList().getTable("T_RESULTADO");
                for (int i = 0; i < centroCostos.getNumRows(); i++) {
                    centroCostos.setRow(i);
                    BeanCentroCosto c = new BeanCentroCosto();
                    c.setIdCentroCosto(centroCostos.getString("CODIGO"));
                    c.setDescripcion(centroCostos.getString("DESCRIP").toUpperCase());
                    lstCentroCostos.add(c);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            conSAP.DesconectarSAP();
        }
        return lstCentroCostos;
    }

    public List<BeanPeriodoReporte> getPeriodos() throws Exception {
        List<BeanPeriodoReporte> lstPeriodosReporte = new ArrayList<BeanPeriodoReporte>();
        String resultado = "";
        ConexionSAP conSAP = ConexionSAP.getConexionSAP();
        try{
            conSAP.RegistrarRFC("ZMM_RFCFN_PERIODOS_ED");
            conSAP.EjecutarRFC();

            resultado = conSAP.rFC.getExportParameterList().getField("RESULTADO").getString();

            if(resultado.equals("X")){
                com.sap.mw.jco.JCO.Table periodos = null;
                periodos = conSAP.rFC.getTableParameterList().getTable("T_RESULTADO");
                for (int i = 0; i < periodos.getNumRows(); i++) {
                    periodos.setRow(i);
                    BeanPeriodoReporte p = new BeanPeriodoReporte();
                    p.setId(periodos.getString("PERIODO"));
                    p.setDescripcion(periodos.getString("PERIODO"));
                    lstPeriodosReporte.add(p);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            conSAP.DesconectarSAP();
        }
        return lstPeriodosReporte;
    }

    public List<BeanEvaluador> getEvaluadores(String periodo) throws Exception {
        List<BeanEvaluador> lstEvaluador = new ArrayList<BeanEvaluador>();
        String resultado = "";
        ConexionSAP conSAP = ConexionSAP.getConexionSAP();
//        System.out.println("Coneccion Exitosa");
        try{
            conSAP.RegistrarRFC("ZMM_RFCFN_EVALUADORES_ED");
            conSAP.IngresarDatosInput(periodo, "PERIODO");
            conSAP.EjecutarRFC();

            resultado = conSAP.rFC.getExportParameterList().getField("RESULTADO").getString();
//            System.out.println(resultado);
            
            if(resultado.equals("X")){
                com.sap.mw.jco.JCO.Table evaluadores = null;
                evaluadores = conSAP.rFC.getTableParameterList().getTable("T_RESULTADO");
                for (int i = 0; i < evaluadores.getNumRows(); i++) {
                    evaluadores.setRow(i);
//                    System.out.println(evaluadores.getString("NOMEMPLEADO").toUpperCase());
                    BeanEvaluador e = new BeanEvaluador();
                    e.setIdEvaluador(evaluadores.getString("ID_EMPLEADO"));
                    e.setNombreEvaluador(evaluadores.getString("NOMEMPLEADO").toUpperCase());
                    lstEvaluador.add(e);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            conSAP.DesconectarSAP();
        }
        return lstEvaluador;
    }

    public List<BeanEvaluado> getEvaluados(String periodo) throws Exception {
        List<BeanEvaluado> lstEvaluado = new ArrayList<BeanEvaluado>();
        String resultado = "";
        ConexionSAP conSAP = ConexionSAP.getConexionSAP();
        try{
            conSAP.RegistrarRFC("ZMM_RFCFN_EVALUADOS_ED");
            conSAP.IngresarDatosInput(periodo, "PERIODO");
            conSAP.EjecutarRFC();

            resultado = conSAP.rFC.getExportParameterList().getField("RESULTADO").getString();

            if(resultado.equals("X")){
                com.sap.mw.jco.JCO.Table evaluados = null;
                evaluados = conSAP.rFC.getTableParameterList().getTable("T_RESULTADO");
                for (int i = 0; i < evaluados.getNumRows(); i++) {
                    evaluados.setRow(i);
                    BeanEvaluado e = new BeanEvaluado();
                    e.setIdEmpleado(evaluados.getString("ID_EMPLEADO"));
                    e.setNombreEmpleado(evaluados.getString("NOMEMPLEADO").toUpperCase());
                    lstEvaluado.add(e);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            conSAP.DesconectarSAP();
        }
        return lstEvaluado;
    }
    
//    Alex
    public List<BeanTipoPuesto> getTipoPuesto() throws Exception {
        List<BeanTipoPuesto> lstTipoPuesto = new ArrayList<BeanTipoPuesto>();
        String resultado = "";
        ConexionSAP conSAP = ConexionSAP.getConexionSAP();
        try{
            conSAP.RegistrarRFC("ZHR_RFC_TIPO_PUESTO");
            conSAP.EjecutarRFC();

//            resultado = conSAP.rFC.getExportParameterList().getField("RESULTADO").getString();
//            System.out.println(resultado);
//            if(resultado.equals("X")){
                com.sap.mw.jco.JCO.Table TTipoPuesto = null;
                TTipoPuesto = conSAP.rFC.getTableParameterList().getTable("ET_TPUESTO");
                if (TTipoPuesto!=null) {
		                for (int i = 0; i < TTipoPuesto.getNumRows(); i++) {
		                	TTipoPuesto.setRow(i);
		//                    System.out.println(TTipoPuesto.getString("CODTPUESTO"));
		                    BeanTipoPuesto tp= new BeanTipoPuesto();
		                    tp.setIdPuesto(TTipoPuesto.getString("CODTPUESTO"));
		                    tp.setNombrePuesto(TTipoPuesto.getString("DESTPUESTO").toUpperCase());
		                    lstTipoPuesto.add(tp);
		                }
                }
//            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            conSAP.DesconectarSAP();
        }
        return lstTipoPuesto;
    }
    
//    Fin Alex
}